package com.sky.sky_pojo.dto;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

import com.sky.sky_pojo.entity.OrderDetail;

import lombok.Data;

/**
 * 根据id查询订单响应类
 */
@Data
public class OrderVO {

    /**
     * 订单号（唯一标识一笔订单）
     */
    private String number;
    
    /**
     * 订单状态（使用OrderStatus枚举中的值）
     */
    private Integer status;
    
    /**
     * 下单用户ID，关联用户表
     */
    private Long userId;
    
    /**
     * 地址ID，关联地址表
     */
    private Long addressBookId;
    
    /**
     * 下单时间，用户提交订单的时间
     */
    private LocalDateTime orderTime;
    
    /**
     * 结账时间，用户完成支付的时间
     */
    private LocalDateTime checkoutTime;
    
    /**
     * 支付方式（使用PayMethod枚举中的值）
     */
    private Integer payMethod;
    
    /**
     * 支付状态（使用PayStatus枚举中的值）
     */
    private Integer payStatus;
    
    /**
     * 实收金额，订单实际支付的总金额
     */
    private BigDecimal amount;
    
    /**
     * 备注，用户对订单的特殊说明或要求
     */
    private String remark;
    
    /**
     * 手机号，收货人的联系电话
     */
    private String phone;
    
    /**
     * 地址，详细的收货地址
     */
    private String address;
    
    /**
     * 用户名称，下单用户的昵称或姓名
     */
    private String userName;
    
    /**
     * 收货人，接收商品的人员姓名
     */
    private String consignee;
    
    /**
     * 订单取消原因，当订单状态为已取消时填写
     */
    private String cancelReason;
    
    /**
     * 订单拒绝原因，当商家拒绝订单时填写
     */
    private String rejectionReason;
    
    /**
     * 订单取消时间，订单被取消的具体时间
     */
    private LocalDateTime cancelTime;
    
    /**
     * 预计送达时间，系统或商家预估的商品送达时间
     */
    private LocalDateTime estimatedDeliveryTime;
    
    /**
     * 配送状态（1：立即送出，0：选择具体时间）
     */
    private Integer deliveryStatus;
    
    /**
     * 送达时间，商品实际送达的时间
     */
    private LocalDateTime deliveryTime;
    
    /**
     * 打包费，订单的包装费用
     */
    private Integer packAmount;
    
    /**
     * 餐具数量，用户需要的餐具份数
     */
    private Integer tablewareNumber;
    
    /**
     * 餐具数量状态（1：按餐量提供，0：选择具体数量）
     */
    private Integer tablewareStatus;

    List<OrderDetail> orderDetailList = new ArrayList<>();
}
